const express = require("express");
const router = express.Router();
const { User } = require("../../models");
const { success, fail } = require("../../utils/response");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const JWT_SECRET = process.env.JWT_SECRET; // 或者直接使用你的密钥

// 获取所有用户列表（分页）
const { Op } = require("sequelize");

router.post("/list", async (req, res) => {
    const { pageNo = 1, pageSize = 10, keyWord } = req.body;
    console.log("[admin][用户列表] 请求参数:", { pageNo, pageSize, keyWord });

    const where = {
        status: 1 // 只查正常用户
    };

    if (keyWord) {
        where[Op.or] = [
            { phone: { [Op.like]: `%${keyWord}%` } },
            { nickname: { [Op.like]: `%${keyWord}%` } },
        ];
    }

    try {
        const { count, rows } = await User.findAndCountAll({
            where,
            offset: (pageNo - 1) * pageSize,
            limit: pageSize,
            order: [['createdAt', 'DESC']],
            attributes: { exclude: ['password'] } // 排除 password 字段
        });

        console.log(`[admin][用户列表] 查询成功，共 ${count} 条，当前页 ${rows.length} 条`);
        success(res, "", { total: count, users: rows });
    } catch (err) {
        console.error("[admin][用户列表] 查询失败:", err.stack);
        fail(res, "服务器错误", 500);
    }
});



// 获取单个用户详情
router.post("/detail", async (req, res) => {
    const { id } = req.body;
    console.log("[admin][用户详情] 请求用户 ID:", id);

    try {
        const user = await User.findByPk(id);
        if (!user) {
            console.warn("[admin][用户详情] 用户不存在:", id);
            return fail(res, "用户不存在", 404);
        }

        console.log("[admin][用户详情] 查询成功:", user.toJSON());
        success(res, "获取用户成功", user);
    } catch (err) {
        console.error("[admin][用户详情] 查询失败:", err.stack);
        fail(res, "服务器错误", 500);
    }
});

router.post("/create", async (req, res) => {
    const { phone, password, nickname, role } = req.body;
    console.log("[admin][创建用户] 参数:", { phone, nickname, role });

    try {
        const exists = await User.findOne({ where: { phone } });
        if (exists) {
            console.warn("[admin][创建用户] 手机号已存在:", phone);
            return fail(res, "手机号已存在");
        }

        const hashed = await bcrypt.hash(password, 10);
        // 直接传数组，不用 JSON.stringify
        const newUser = await User.create({ phone, password: hashed, nickname, role });

        console.log("[admin][创建用户] 成功:", newUser.toJSON());
        success(res, "用户创建成功", newUser);
    } catch (err) {
        console.error("[admin][创建用户] 失败:", err.stack);
        fail(res, "服务器错误", 500);
    }
});

// 更新用户信息
router.post("/update", async (req, res) => {
    const { id, role } = req.body;
    console.log("[admin][更新用户] 请求参数:", req.body);

    try {
        const [affectedRows] = await User.update(
            { role },
            { where: { id } }
        );

        if (affectedRows === 0) {
            console.warn("[admin][更新用户] 未找到用户:", id);
            return fail(res, "未找到用户", 404);
        }

        console.log(`[admin][更新用户] 成功更新用户 ID: ${id}, 影响行数: ${affectedRows}`);
        success(res, "用户更新成功");
    } catch (err) {
        console.error("[admin][更新用户] 更新失败:", err.stack);
        fail(res, "服务器错误", 500);
    }
});

// 假删除用户（支持批量）
router.post("/delete", async (req, res) => {
    const { ids } = req.body;
    console.log("[admin][假删除用户] 请求删除用户 IDs:", ids);

    // 解析 token 获取当前用户 ID
    const authHeader = req.headers.authorization || req.headers.token || "";
    if (!authHeader || !authHeader.startsWith("Bearer ")) {
        return fail(res, "未提供有效的 Token", 401);
    }

    let currentUserId;
    try {
        const token = authHeader.split(" ")[1];
        const decoded = jwt.verify(token, JWT_SECRET);
        currentUserId = decoded.userId;
    } catch (err) {
        console.error("[admin][假删除用户] Token 解析失败:", err.message);
        return fail(res, "Token 无效或已过期", 401);
    }

    let idArray = [];

    if (typeof ids === 'string') {
        idArray = ids.split(',').map(id => Number(id.trim())).filter(Boolean);
    } else if (typeof ids === 'number') {
        idArray = [ids];
    }

    if (idArray.length === 0) {
        return fail(res, "请提供有效的用户 ID 列表");
    }

    // 🚫 防止删除自己
    if (idArray.includes(currentUserId)) {
        return fail(res, "不能删除自己", 400);
    }

    try {
        const [affectedRows] = await User.update(
            { status: 0 },
            {
                where: {
                    id: idArray,
                    status: 1  // 只操作未删除的用户
                }
            }
        );

        if (affectedRows === 0) {
            console.warn("[admin][假删除用户] 没有用户被更新，可能全部不存在或已删除");
            return fail(res, "未找到用户或已删除", 404);
        }

        console.log(`[admin][假删除用户] 成功标记 ${affectedRows} 个用户为已删除`);
        success(res, `成功删除 ${affectedRows} 个用户`);
    } catch (err) {
        console.error("[admin][假删除用户] 删除失败:", err.stack);
        fail(res, "服务器错误", 500);
    }
});




module.exports = router;
